home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / swingall.jar / javax / swing / text / CompositeView.class (.txt) < prev    next >
Encoding:
Java Class File  |  1999-07-15  |  10.4 KB  |  566 lines

  1. package javax.swing.text;
  2.  
  3. import java.awt.Rectangle;
  4. import java.awt.Shape;
  5. import javax.swing.event.DocumentEvent;
  6. import javax.swing.event.DocumentEvent.EventType;
  7. import javax.swing.text.Position.Bias;
  8.  
  9. public abstract class CompositeView extends View {
  10.    private static View[] ZERO = new View[0];
  11.    private View[] children = new View[1];
  12.    private int nchildren = 0;
  13.    private short left;
  14.    private short right;
  15.    private short top;
  16.    private short bottom;
  17.    private Rectangle childAlloc = new Rectangle();
  18.  
  19.    public CompositeView(Element var1) {
  20.       super(var1);
  21.    }
  22.  
  23.    public void append(View var1) {
  24.       View[] var2 = new View[]{var1};
  25.       this.replace(this.nchildren, 0, var2);
  26.    }
  27.  
  28.    public void changedUpdate(DocumentEvent var1, Shape var2, ViewFactory var3) {
  29.       Element var4 = ((View)this).getElement();
  30.       DocumentEvent.ElementChange var5 = var1.getChange(var4);
  31.       if (var5 != null && !this.updateChildren(var5, var1, var3)) {
  32.          var5 = null;
  33.       }
  34.  
  35.       this.forwardUpdate(var5, var1, var2, var3);
  36.       this.updateLayout(var5, var1, var2);
  37.    }
  38.  
  39.    protected abstract void childAllocation(int var1, Rectangle var2);
  40.  
  41.    protected boolean flipEastAndWestAtEnds(int var1, Position.Bias var2) {
  42.       return false;
  43.    }
  44.  
  45.    void forwardUpdate(DocumentEvent.ElementChange var1, DocumentEvent var2, Shape var3, ViewFactory var4) {
  46.       Element var5 = ((View)this).getElement();
  47.       int var6 = var2.getOffset();
  48.       int var7 = this.getViewIndexAtPosition(var6);
  49.       int var8 = var7;
  50.       View var9 = var7 >= 0 ? this.getView(var7) : null;
  51.       if (var9 != null && var9.getStartOffset() == var6 && var6 > 0) {
  52.          var7 = Math.max(var7 - 1, 0);
  53.       }
  54.  
  55.       if (var2.getType() != EventType.REMOVE) {
  56.          var8 = this.getViewIndexAtPosition(var6 + var2.getLength());
  57.          if (var8 < 0) {
  58.             var8 = this.getViewCount() - 1;
  59.          }
  60.       }
  61.  
  62.       int var10 = var8 + 1;
  63.       int var11 = var10;
  64.       Element[] var12 = var1 != null ? var1.getChildrenAdded() : null;
  65.       if (var12 != null && var12.length > 0) {
  66.          var10 = var1.getIndex();
  67.          var11 = var10 + var12.length - 1;
  68.       }
  69.  
  70.       for(int var13 = var7; var13 <= var8; ++var13) {
  71.          if (var13 < var10 || var13 > var11) {
  72.             var9 = this.getView(var13);
  73.             if (var9 != null) {
  74.                Shape var14 = this.getChildAllocation(var13, var3);
  75.                this.forwardUpdateToView(var9, var2, var14, var4);
  76.             }
  77.          }
  78.       }
  79.  
  80.    }
  81.  
  82.    void forwardUpdateToView(View var1, DocumentEvent var2, Shape var3, ViewFactory var4) {
  83.       DocumentEvent.EventType var5 = var2.getType();
  84.       if (var5 == EventType.INSERT) {
  85.          var1.insertUpdate(var2, var3, var4);
  86.       } else if (var5 == EventType.REMOVE) {
  87.          var1.removeUpdate(var2, var3, var4);
  88.       } else {
  89.          var1.changedUpdate(var2, var3, var4);
  90.       }
  91.  
  92.    }
  93.  
  94.    protected final short getBottomInset() {
  95.       return this.bottom;
  96.    }
  97.  
  98.    public Shape getChildAllocation(int var1, Shape var2) {
  99.       Rectangle var3 = this.getInsideAllocation(var2);
  100.       this.childAllocation(var1, var3);
  101.       return var3;
  102.    }
  103.  
  104.    protected Rectangle getInsideAllocation(Shape var1) {
  105.       if (var1 != null) {
  106.          Rectangle var2;
  107.          if (var1 instanceof Rectangle) {
  108.             var2 = (Rectangle)var1;
  109.          } else {
  110.             var2 = var1.getBounds();
  111.          }
  112.  
  113.          this.childAlloc.setBounds(var2);
  114.          Rectangle var10000 = this.childAlloc;
  115.          var10000.x += this.left;
  116.          var10000 = this.childAlloc;
  117.          var10000.y += this.top;
  118.          var10000 = this.childAlloc;
  119.          var10000.width -= this.left + this.right;
  120.          var10000 = this.childAlloc;
  121.          var10000.height -= this.top + this.bottom;
  122.          return this.childAlloc;
  123.       } else {
  124.          return null;
  125.       }
  126.    }
  127.  
  128.    protected final short getLeftInset() {
  129.       return this.left;
  130.    }
  131.  
  132.    protected int getNextEastWestVisualPositionFrom(int var1, Position.Bias var2, Shape var3, int var4, Position.Bias[] var5) throws BadLocationException {
  133.       boolean var6 = var4 == 3;
  134.       Rectangle var7 = this.getInsideAllocation(var3);
  135.       int var9 = var6 ? 1 : -1;
  136.       int var8;
  137.       if (var1 == -1) {
  138.          View var10 = var6 ? this.getView(0) : this.getView(this.getViewCount() - 1);
  139.          this.childAllocation(0, var7);
  140.          var8 = var10.getNextVisualPositionFrom(var1, var2, var7, var4, var5);
  141.          if (var8 == -1 && var6 && this.getViewCount() > 1) {
  142.             var10 = this.getView(1);
  143.             var7 = this.getInsideAllocation(var3);
  144.             this.childAllocation(1, var7);
  145.             var8 = var10.getNextVisualPositionFrom(-1, var5[0], var7, var4, var5);
  146.          }
  147.       } else {
  148.          int var19;
  149.          if (var2 == Bias.Backward) {
  150.             var19 = this.getViewIndexAtPosition(Math.max(((View)this).getStartOffset(), var1 - 1));
  151.          } else {
  152.             var19 = this.getViewIndexAtPosition(var1);
  153.          }
  154.  
  155.          View var11 = this.getView(var19);
  156.          this.childAllocation(var19, var7);
  157.          var8 = var11.getNextVisualPositionFrom(var1, var2, var7, var4, var5);
  158.          if (var8 == -1) {
  159.             if (this.flipEastAndWestAtEnds(var1, var2)) {
  160.                var9 *= -1;
  161.             }
  162.  
  163.             var19 += var9;
  164.             if (var19 >= 0 && var19 < this.getViewCount()) {
  165.                var11 = this.getView(var19);
  166.                var7 = this.getInsideAllocation(var3);
  167.                this.childAllocation(var19, var7);
  168.                var8 = var11.getNextVisualPositionFrom(-1, var2, var7, var4, var5);
  169.                if (var8 == var1 && var8 != -1 && var5[0] != var2) {
  170.                   var7 = this.getInsideAllocation(var3);
  171.                   this.childAllocation(var19, var7);
  172.                   var8 = var11.getNextVisualPositionFrom(var8, var5[0], var7, var4, var5);
  173.                }
  174.             }
  175.          } else {
  176.             if (this.flipEastAndWestAtEnds(var1, var2)) {
  177.                var9 *= -1;
  178.             }
  179.  
  180.             var19 += var9;
  181.             if (var5[0] != var2 && (var9 == 1 && var11.getEndOffset() == var8 || var9 == -1 && var11.getStartOffset() == var8) && var19 >= 0 && var19 < this.getViewCount()) {
  182.                var11 = this.getView(var19);
  183.                var7 = this.getInsideAllocation(var3);
  184.                this.childAllocation(var19, var7);
  185.                Position.Bias var12 = var5[0];
  186.                int var13 = var11.getNextVisualPositionFrom(-1, var2, var7, var4, var5);
  187.                if (var5[0] == var2) {
  188.                   var8 = var13;
  189.                } else {
  190.                   var5[0] = var12;
  191.                }
  192.             }
  193.          }
  194.       }
  195.  
  196.       return var8;
  197.    }
  198.  
  199.    protected int getNextNorthSouthVisualPositionFrom(int var1, Position.Bias var2, Shape var3, int var4, Position.Bias[] var5) throws BadLocationException {
  200.       if (this.getViewCount() == 0) {
  201.          return var1;
  202.       } else {
  203.          boolean var6 = var4 == 1;
  204.          Rectangle var7 = this.getInsideAllocation(var3);
  205.          int var8;
  206.          if (var1 == -1) {
  207.             View var9 = var6 ? this.getView(this.getViewCount() - 1) : this.getView(0);
  208.             this.childAllocation(0, var7);
  209.             var8 = var9.getNextVisualPositionFrom(var1, var2, var7, var4, var5);
  210.          } else {
  211.             int var12;
  212.             if (var2 == Bias.Backward && var1 > 0) {
  213.                var12 = this.getViewIndexAtPosition(var1 - 1);
  214.             } else {
  215.                var12 = this.getViewIndexAtPosition(var1);
  216.             }
  217.  
  218.             View var10 = this.getView(var12);
  219.             this.childAllocation(var12, var7);
  220.             var8 = var10.getNextVisualPositionFrom(var1, var2, var7, var4, var5);
  221.             if (var8 == -1) {
  222.                label49: {
  223.                   if (var6) {
  224.                      --var12;
  225.                      if (var12 >= 0) {
  226.                         break label49;
  227.                      }
  228.                   }
  229.  
  230.                   if (var6) {
  231.                      return var8;
  232.                   }
  233.  
  234.                   ++var12;
  235.                   if (var12 >= this.getViewCount()) {
  236.                      return var8;
  237.                   }
  238.                }
  239.  
  240.                var10 = this.getView(var12);
  241.                var7 = this.getInsideAllocation(var3);
  242.                this.childAllocation(var12, var7);
  243.                var8 = var10.getNextVisualPositionFrom(-1, var2, var7, var4, var5);
  244.             }
  245.          }
  246.  
  247.          return var8;
  248.       }
  249.    }
  250.  
  251.    public int getNextVisualPositionFrom(int var1, Position.Bias var2, Shape var3, int var4, Position.Bias[] var5) throws BadLocationException {
  252.       this.getInsideAllocation(var3);
  253.       switch (var4) {
  254.          case 1:
  255.             return this.getNextNorthSouthVisualPositionFrom(var1, var2, var3, var4, var5);
  256.          case 2:
  257.          case 4:
  258.          case 6:
  259.          default:
  260.             throw new IllegalArgumentException("Bad direction: " + var4);
  261.          case 3:
  262.             return this.getNextEastWestVisualPositionFrom(var1, var2, var3, var4, var5);
  263.          case 5:
  264.             return this.getNextNorthSouthVisualPositionFrom(var1, var2, var3, var4, var5);
  265.          case 7:
  266.             return this.getNextEastWestVisualPositionFrom(var1, var2, var3, var4, var5);
  267.       }
  268.    }
  269.  
  270.    protected final short getRightInset() {
  271.       return this.right;
  272.    }
  273.  
  274.    protected final short getTopInset() {
  275.       return this.top;
  276.    }
  277.  
  278.    public View getView(int var1) {
  279.       return this.children[var1];
  280.    }
  281.  
  282.    protected abstract View getViewAtPoint(int var1, int var2, Rectangle var3);
  283.  
  284.    protected View getViewAtPosition(int var1, Rectangle var2) {
  285.       Element var3 = ((View)this).getElement();
  286.       int var4 = var3.getElementIndex(var1);
  287.       Element var5 = var3.getElement(var4);
  288.       if (var5 != null && var4 < this.getViewCount()) {
  289.          View var6 = this.getView(var4);
  290.          if (var6.getElement() == var5) {
  291.             if (var2 != null) {
  292.                this.childAllocation(var4, var2);
  293.             }
  294.  
  295.             return var6;
  296.          }
  297.       }
  298.  
  299.       return null;
  300.    }
  301.  
  302.    public int getViewCount() {
  303.       return this.nchildren;
  304.    }
  305.  
  306.    protected int getViewIndexAtPosition(int var1) {
  307.       Element var2 = ((View)this).getElement();
  308.       return var2.getElementIndex(var1);
  309.    }
  310.  
  311.    public void insert(int var1, View var2) {
  312.       View[] var3 = new View[]{var2};
  313.       this.replace(var1, 0, var3);
  314.    }
  315.  
  316.    public void insertUpdate(DocumentEvent var1, Shape var2, ViewFactory var3) {
  317.       Element var4 = ((View)this).getElement();
  318.       DocumentEvent.ElementChange var5 = var1.getChange(var4);
  319.       if (var5 != null && !this.updateChildren(var5, var1, var3)) {
  320.          var5 = null;
  321.       }
  322.  
  323.       this.forwardUpdate(var5, var1, var2, var3);
  324.       this.updateLayout(var5, var1, var2);
  325.    }
  326.  
  327.    protected abstract boolean isAfter(int var1, int var2, Rectangle var3);
  328.  
  329.    protected abstract boolean isBefore(int var1, int var2, Rectangle var3);
  330.  
  331.    protected void loadChildren(ViewFactory var1) {
  332.       Element var2 = ((View)this).getElement();
  333.       int var3 = var2.getElementCount();
  334.       if (var3 > 0) {
  335.          View[] var4 = new View[var3];
  336.  
  337.          for(int var5 = 0; var5 < var3; ++var5) {
  338.             var4[var5] = var1.create(var2.getElement(var5));
  339.          }
  340.  
  341.          this.replace(0, 0, var4);
  342.       }
  343.  
  344.    }
  345.  
  346.    public Shape modelToView(int var1, Shape var2, Position.Bias var3) throws BadLocationException {
  347.       boolean var4 = var3 == Bias.Backward;
  348.       int var5 = var4 ? Math.max(0, var1 - 1) : var1;
  349.       if (var4 && var5 < ((View)this).getStartOffset()) {
  350.          return null;
  351.       } else {
  352.          int var6 = this.getViewIndexAtPosition(var5);
  353.          if (var6 != -1 && var6 < this.getViewCount()) {
  354.             View var7 = this.getView(var6);
  355.             if (var7 != null && var5 >= var7.getStartOffset() && var5 < var7.getEndOffset()) {
  356.                Shape var8 = var7.modelToView(var1, this.getChildAllocation(var6, var2), var3);
  357.                if (var8 == null && var7.getEndOffset() == var1) {
  358.                   ++var6;
  359.                   if (var6 < this.getViewCount()) {
  360.                      var7 = this.getView(var6);
  361.                      var8 = var7.modelToView(var1, this.getChildAllocation(var6, var2), var3);
  362.                   }
  363.                }
  364.  
  365.                return var8;
  366.             }
  367.          }
  368.  
  369.          throw new BadLocationException("Position not represented by view", var1);
  370.       }
  371.    }
  372.  
  373.    public Shape modelToView(int var1, Position.Bias var2, int var3, Position.Bias var4, Shape var5) throws BadLocationException {
  374.       if (var1 == ((View)this).getStartOffset() && var3 == ((View)this).getEndOffset()) {
  375.          return var5;
  376.       } else {
  377.          Rectangle var6 = this.getInsideAllocation(var5);
  378.          Rectangle var7 = new Rectangle(var6);
  379.          View var8 = this.getViewAtPosition(var2 == Bias.Backward ? Math.max(0, var1 - 1) : var1, var7);
  380.          Rectangle var9 = new Rectangle(var6);
  381.          View var10 = this.getViewAtPosition(var4 == Bias.Backward ? Math.max(0, var3 - 1) : var3, var9);
  382.          if (var8 == var10) {
  383.             return var8 == null ? var5 : var8.modelToView(var1, var2, var3, var4, var7);
  384.          } else {
  385.             int var11 = this.getViewCount();
  386.  
  387.             for(int var12 = 0; var12 < var11; ++var12) {
  388.                View var13;
  389.                if ((var13 = this.getView(var12)) == var8 || var13 == var10) {
  390.                   Rectangle var16 = new Rectangle();
  391.                   View var14;
  392.                   Rectangle var15;
  393.                   if (var13 == var8) {
  394.                      var15 = var8.modelToView(var1, var2, var8.getEndOffset(), Bias.Backward, var7).getBounds();
  395.                      var14 = var10;
  396.                   } else {
  397.                      var15 = var10.modelToView(var10.getStartOffset(), Bias.Forward, var3, var4, var9).getBounds();
  398.                      var14 = var8;
  399.                   }
  400.  
  401.                   while(true) {
  402.                      ++var12;
  403.                      if (var12 >= var11 || this.getView(var12) == var14) {
  404.                         if (var14 != null) {
  405.                            Shape var17;
  406.                            if (var14 == var10) {
  407.                               var17 = var10.modelToView(var10.getStartOffset(), Bias.Forward, var3, var4, var9);
  408.                            } else {
  409.                               var17 = var8.modelToView(var1, var2, var8.getEndOffset(), Bias.Backward, var7);
  410.                            }
  411.  
  412.                            if (var17 instanceof Rectangle) {
  413.                               var15.add((Rectangle)var17);
  414.                            } else {
  415.                               var15.add(var17.getBounds());
  416.                            }
  417.                         }
  418.  
  419.                         return var15;
  420.                      }
  421.  
  422.                      var16.setBounds(var6);
  423.                      this.childAllocation(var12, var16);
  424.                      var15.add(var16);
  425.                   }
  426.                }
  427.             }
  428.  
  429.             throw new BadLocationException("Position not represented by view", var1);
  430.          }
  431.       }
  432.    }
  433.  
  434.    void remove(int var1) {
  435.       this.replace(var1, 1, ZERO);
  436.    }
  437.  
  438.    public void removeAll() {
  439.       this.replace(0, this.nchildren, ZERO);
  440.    }
  441.  
  442.    public void removeUpdate(DocumentEvent var1, Shape var2, ViewFactory var3) {
  443.       Element var4 = ((View)this).getElement();
  444.       DocumentEvent.ElementChange var5 = var1.getChange(var4);
  445.       if (var5 != null && !this.updateChildren(var5, var1, var3)) {
  446.          var5 = null;
  447.       }
  448.  
  449.       this.forwardUpdate(var5, var1, var2, var3);
  450.       this.updateLayout(var5, var1, var2);
  451.    }
  452.  
  453.    public void replace(int var1, int var2, View[] var3) {
  454.       for(int var4 = var1; var4 < var1 + var2; ++var4) {
  455.          this.children[var4].setParent((View)null);
  456.          this.children[var4] = null;
  457.       }
  458.  
  459.       int var5 = var3.length - var2;
  460.       int var6 = var1 + var2;
  461.       int var7 = this.nchildren - var6;
  462.       int var8 = var6 + var5;
  463.       if (this.nchildren + var5 >= this.children.length) {
  464.          int var9 = Math.max(2 * this.children.length, this.nchildren + var5);
  465.          View[] var10 = new View[var9];
  466.          System.arraycopy(this.children, 0, var10, 0, var1);
  467.          System.arraycopy(var3, 0, var10, var1, var3.length);
  468.          System.arraycopy(this.children, var6, var10, var8, var7);
  469.          this.children = var10;
  470.       } else {
  471.          System.arraycopy(this.children, var6, this.children, var8, var7);
  472.          System.arraycopy(var3, 0, this.children, var1, var3.length);
  473.       }
  474.  
  475.       this.nchildren += var5;
  476.  
  477.       for(int var11 = 0; var11 < var3.length; ++var11) {
  478.          var3[var11].setParent(this);
  479.       }
  480.  
  481.    }
  482.  
  483.    protected final void setInsets(short var1, short var2, short var3, short var4) {
  484.       this.top = var1;
  485.       this.left = var2;
  486.       this.right = var4;
  487.       this.bottom = var3;
  488.    }
  489.  
  490.    protected final void setParagraphInsets(AttributeSet var1) {
  491.       this.top = (short)((int)StyleConstants.getSpaceAbove(var1));
  492.       this.left = (short)((int)StyleConstants.getLeftIndent(var1));
  493.       this.bottom = (short)((int)StyleConstants.getSpaceBelow(var1));
  494.       this.right = (short)((int)StyleConstants.getRightIndent(var1));
  495.    }
  496.  
  497.    public void setParent(View var1) {
  498.       super.setParent(var1);
  499.       if (var1 != null && this.nchildren == 0) {
  500.          ViewFactory var2 = ((View)this).getViewFactory();
  501.          this.loadChildren(var2);
  502.       }
  503.  
  504.    }
  505.  
  506.    boolean updateChildren(DocumentEvent.ElementChange var1, DocumentEvent var2, ViewFactory var3) {
  507.       Element[] var4 = var1.getChildrenRemoved();
  508.       Element[] var5 = var1.getChildrenAdded();
  509.       View[] var6 = new View[var5.length];
  510.  
  511.       for(int var7 = 0; var7 < var5.length; ++var7) {
  512.          var6[var7] = var3.create(var5[var7]);
  513.       }
  514.  
  515.       int var8 = var1.getIndex();
  516.       this.replace(var8, var4.length, var6);
  517.       return true;
  518.    }
  519.  
  520.    void updateLayout(DocumentEvent.ElementChange var1, DocumentEvent var2, Shape var3) {
  521.       if (var1 != null && var3 != null) {
  522.          ((View)this).preferenceChanged((View)null, true, true);
  523.          ((View)this).getContainer().repaint();
  524.       }
  525.  
  526.    }
  527.  
  528.    public int viewToModel(float var1, float var2, Shape var3, Position.Bias[] var4) {
  529.       Rectangle var5 = this.getInsideAllocation(var3);
  530.       if (this.isBefore((int)var1, (int)var2, var5)) {
  531.          int var12 = -1;
  532.  
  533.          try {
  534.             var12 = this.getNextVisualPositionFrom(-1, Bias.Forward, var3, 3, var4);
  535.          } catch (BadLocationException var7) {
  536.          } catch (IllegalArgumentException var8) {
  537.          }
  538.  
  539.          if (var12 == -1) {
  540.             var12 = ((View)this).getStartOffset();
  541.             var4[0] = Bias.Forward;
  542.          }
  543.  
  544.          return var12;
  545.       } else if (this.isAfter((int)var1, (int)var2, var5)) {
  546.          int var11 = -1;
  547.  
  548.          try {
  549.             var11 = this.getNextVisualPositionFrom(-1, Bias.Forward, var3, 7, var4);
  550.          } catch (BadLocationException var9) {
  551.          } catch (IllegalArgumentException var10) {
  552.          }
  553.  
  554.          if (var11 == -1) {
  555.             var11 = ((View)this).getEndOffset() - 1;
  556.             var4[0] = Bias.Forward;
  557.          }
  558.  
  559.          return var11;
  560.       } else {
  561.          View var6 = this.getViewAtPoint((int)var1, (int)var2, var5);
  562.          return var6 != null ? var6.viewToModel(var1, var2, var5, var4) : -1;
  563.       }
  564.    }
  565. }
  566.